home *** CD-ROM | disk | FTP | other *** search
- //@line 43 "/tmp/buildd/iceweasel-10.0.12esr/browser/components/sidebar/src/nsSidebar.js"
-
- Components.utils.import("resource://gre/modules/Services.jsm");
- Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
- const DEBUG = false; /* set to false to suppress debug messages */
-
- const SIDEBAR_CONTRACTID = "@mozilla.org/sidebar;1";
- const SIDEBAR_CID = Components.ID("{22117140-9c6e-11d3-aaf1-00805f8a4905}");
- const nsISidebar = Components.interfaces.nsISidebar;
- const nsISidebarExternal = Components.interfaces.nsISidebarExternal;
- const nsIClassInfo = Components.interfaces.nsIClassInfo;
-
- // File extension for Sherlock search plugin description files
- const SHERLOCK_FILE_EXT_REGEXP = /\.src$/i;
-
- function nsSidebar()
- {
- }
-
- nsSidebar.prototype.classID = SIDEBAR_CID;
-
- nsSidebar.prototype.nc = "http://home.netscape.com/NC-rdf#";
-
- function sidebarURLSecurityCheck(url)
- {
- if (!/^(https?:|ftp:)/i.test(url)) {
- Components.utils.reportError("Invalid argument passed to window.sidebar.addPanel: Unsupported panel URL." );
- return false;
- }
- return true;
- }
-
- /* decorate prototype to provide ``class'' methods and property accessors */
- nsSidebar.prototype.addPanel =
- function (aTitle, aContentURL, aCustomizeURL)
- {
- debug("addPanel(" + aTitle + ", " + aContentURL + ", " +
- aCustomizeURL + ")");
-
- return this.addPanelInternal(aTitle, aContentURL, aCustomizeURL, false);
- }
-
- nsSidebar.prototype.addPersistentPanel =
- function(aTitle, aContentURL, aCustomizeURL)
- {
- debug("addPersistentPanel(" + aTitle + ", " + aContentURL + ", " +
- aCustomizeURL + ")\n");
-
- return this.addPanelInternal(aTitle, aContentURL, aCustomizeURL, true);
- }
-
- nsSidebar.prototype.addPanelInternal =
- function (aTitle, aContentURL, aCustomizeURL, aPersist)
- {
- // XXX Bug 620418: We shouldn't do this anymore. Instead, we should find the
- // global object for our caller and use it.
- var win = Services.wm.getMostRecentWindow("navigator:browser");
- if (!sidebarURLSecurityCheck(aContentURL))
- return;
-
- var uri = null;
- try {
- uri = Services.io.newURI(aContentURL, null, null);
- }
- catch(ex) { return; }
-
- win.PlacesUIUtils.showBookmarkDialog({ action: "add"
- , type: "bookmark"
- , hiddenRows: [ "description"
- , "keyword"
- , "location"
- , "loadInSidebar" ]
- , uri: uri
- , title: aTitle
- , loadBookmarkInSidebar: true
- }, win, true);
- }
-
- nsSidebar.prototype.validateSearchEngine =
- function (engineURL, iconURL)
- {
- try
- {
- // Make sure the URLs are HTTP, HTTPS, or FTP.
- var isWeb = /^(https?|ftp):\/\//i;
-
- if (!isWeb.test(engineURL))
- throw "Unsupported search engine URL";
-
- if (iconURL && !isWeb.test(iconURL))
- throw "Unsupported search icon URL.";
- }
- catch(ex)
- {
- debug(ex);
- Components.utils.reportError("Invalid argument passed to window.sidebar.addSearchEngine: " + ex);
-
- var searchBundle = Services.strings.createBundle("chrome://global/locale/search/search.properties");
- var brandBundle = Services.strings.createBundle("chrome://branding/locale/brand.properties");
- var brandName = brandBundle.GetStringFromName("brandShortName");
- var title = searchBundle.GetStringFromName("error_invalid_engine_title");
- var msg = searchBundle.formatStringFromName("error_invalid_engine_msg",
- [brandName], 1);
- Services.ww.getNewPrompter(null).alert(title, msg);
- return false;
- }
-
- return true;
- }
-
- // The suggestedTitle and suggestedCategory parameters are ignored, but remain
- // for backward compatibility.
- nsSidebar.prototype.addSearchEngine =
- function (engineURL, iconURL, suggestedTitle, suggestedCategory)
- {
- debug("addSearchEngine(" + engineURL + ", " + iconURL + ", " +
- suggestedCategory + ", " + suggestedTitle + ")");
-
- if (!this.validateSearchEngine(engineURL, iconURL))
- return;
-
- // OpenSearch files will likely be far more common than Sherlock files, and
- // have less consistent suffixes, so we assume that ".src" is a Sherlock
- // (text) file, and anything else is OpenSearch (XML).
- var dataType;
- if (SHERLOCK_FILE_EXT_REGEXP.test(engineURL))
- dataType = Components.interfaces.nsISearchEngine.DATA_TEXT;
- else
- dataType = Components.interfaces.nsISearchEngine.DATA_XML;
-
- Services.search.addEngine(engineURL, dataType, iconURL, true);
- }
-
- // This function exists largely to implement window.external.AddSearchProvider(),
- // to match other browsers' APIs. The capitalization, although nonstandard here,
- // is therefore important.
- nsSidebar.prototype.AddSearchProvider =
- function (aDescriptionURL)
- {
- // Get the favicon URL for the current page, or our best guess at the current
- // page since we don't have easy access to the active document. Most search
- // engines will override this with an icon specified in the OpenSearch
- // description anyway.
- var win = Services.wm.getMostRecentWindow("navigator:browser");
- var browser = win.gBrowser;
- var iconURL = "";
- // Use documentURIObject in the check for shouldLoadFavIcon so that we
- // do the right thing with about:-style error pages. Bug 453442
- if (browser.shouldLoadFavIcon(browser.selectedBrowser
- .contentDocument
- .documentURIObject))
- iconURL = browser.getIcon();
-
- if (!this.validateSearchEngine(aDescriptionURL, iconURL))
- return;
-
- const typeXML = Components.interfaces.nsISearchEngine.DATA_XML;
- Services.search.addEngine(aDescriptionURL, typeXML, iconURL, true);
- }
-
- // This function exists to implement window.external.IsSearchProviderInstalled(),
- // for compatibility with other browsers. It will return an integer value
- // indicating whether the given engine is installed for the current user.
- // However, it is currently stubbed out due to security/privacy concerns
- // stemming from difficulties in determining what domain issued the request.
- // See bug 340604 and
- // http://msdn.microsoft.com/en-us/library/aa342526%28VS.85%29.aspx .
- // XXX Implement this!
- nsSidebar.prototype.IsSearchProviderInstalled =
- function (aSearchURL)
- {
- return 0;
- }
-
- nsSidebar.prototype.classInfo = XPCOMUtils.generateCI({classID: SIDEBAR_CID,
- contractID: SIDEBAR_CONTRACTID,
- classDescription: "Sidebar",
- interfaces: [nsISidebar, nsISidebarExternal],
- flags: nsIClassInfo.DOM_OBJECT});
-
- nsSidebar.prototype.QueryInterface = XPCOMUtils.generateQI([nsISidebar, nsISidebarExternal]);
-
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([nsSidebar]);
-
- /* static functions */
- if (DEBUG)
- debug = function (s) { dump("-*- sidebar component: " + s + "\n"); }
- else
- debug = function (s) {}
-